package com.collabscm.pf.sso;

/**
 * 认证管理器，用于控制用户是否拥有合法的授权信息（即：Token）。
 * 
 * 设计目标：
 * 1、支持多个系统的认证，目前我们仅有一个系统，但将来可能有多个系统需要认证；
 * 2、用户的Token可能隔一段时间需要重新生成一次，也可能一个token可以管很长时间（即在访问系统的时候token就已经在本地的cookie中）；
 * 3、Token信息中包括有：用户ID、登录时的IP地址、登录时间、token过期时间、可访问系统列表；
 * 4、认证服务仅提供验证是否有有效的Token，并控制是否可访问指定系统，但不负责Session管理、以及系统内部权限管理。
 * 5、每个Server在获得有效Token后，自行从Session中获得用户信息，如果没有用户信息（可能由一台机器宕机，而飘移到另一台机器，
 * 而系统没有Cluster，也不会有Session复制）需自行根据认证信息从数据库中重新初始化。
 * 
 * @author Zeng Raoxing
 */
public interface AuthenticationManager {

	/**
	 * 正常情况将返回完整的Authentication对象，如果验证不通过将抛出AuthenticationFailure。
	 * 
	 * @param credentials 待认证的信息
	 */
	Authentication authenticate(Credentials credentials);
	
}
